package org.jeecg.modules.wms.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.modules.wms.entity.WmsPurchaseConfig;
import org.jeecg.modules.wms.mapper.WmsPurchaseConfigMapper;
import org.jeecg.modules.wms.service.IWmsMaterialWarningLogService;
import org.jeecg.modules.wms.service.IWmsPurchaseConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;

/**
 * @Description: 采购配置表Service实现类
 * @Author: jeecg-boot
 * @Date: 2023-07-17
 * @Version: V1.0
 */
@Service
public class WmsPurchaseConfigServiceImpl extends ServiceImpl<WmsPurchaseConfigMapper, WmsPurchaseConfig> implements IWmsPurchaseConfigService {

    @Autowired
    private WmsPurchaseConfigMapper wmsPurchaseConfigMapper;
    
    @Autowired
    private IWmsMaterialWarningLogService wmsMaterialWarningLogService;

    @Override
    public WmsPurchaseConfig getDefaultConfig() {
        WmsPurchaseConfig config = wmsPurchaseConfigMapper.getDefaultConfig();
        if (config == null) {
            // 如果没有配置，创建默认配置
            config = new WmsPurchaseConfig();
            config.setAutoPurchaseEnabled(0);
            config.setAutoPurchaseCron("0 0 2 * * ?"); // 默认每天凌晨2点执行
            config.setApprovalRequired(1);
            config.setNotifyEnabled(0);
            config.setCreateTime(new Date());
            this.save(config);
        }
        return config;
    }

    @Override
    @Transactional
    public Result<?> saveOrUpdateConfig(WmsPurchaseConfig purchaseConfig) {
        try {
            // 保存或更新
            this.saveOrUpdate(purchaseConfig);
            return Result.OK("保存成功");
        } catch (Exception e) {
            return Result.error("保存失败: " + e.getMessage());
        }
    }
    
    @Override
    public Result<?> refreshWarnings() {
        try {
            // 调用物料预警服务刷新预警状态
            return wmsMaterialWarningLogService.refreshWarnings();
        } catch (Exception e) {
            return Result.error("刷新预警失败: " + e.getMessage());
        }
    }
    
    @Override
    @Transactional
    public Result<?> generateAutoPurchaseOrder() {
        try {
            // 这里应该实现自动生成采购单的逻辑
            // 1. 获取所有未处理的物料预警记录
            // 2. 按照供应商分组
            // 3. 为每个供应商生成采购单
            
            // 由于实际业务逻辑可能比较复杂，这里只实现一个简单的示例
            // 实际项目中应该根据具体需求完善此方法
            
            // 调用物料预警服务获取未处理的预警
            Result<?> warningsResult = wmsMaterialWarningLogService.getUnhandledWarnings();
            if (!warningsResult.isSuccess() || warningsResult.getResult() == null) {
                return Result.error("获取未处理的物料预警失败");
            }
            
            // 这里应该有更多的业务逻辑，如：
            // - 根据预警记录生成采购单
            // - 更新预警状态为已处理
            // - 发送通知等
            
            return Result.OK("自动生成采购单成功");
        } catch (Exception e) {
            return Result.error("自动生成采购单失败: " + e.getMessage());
        }
    }
} 